Skip to content

enrich(sudoku,#13410): prose interpretative Backtracking/Genetic/GraphColoring C# (densite 1172/842/862 -> 1286/1327/1301) - #16027

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/densite-13410-sudoku-dotnet
Sep 14, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/densite-13410-sudoku-dotnet

Conversation

@jsboige

@jsboige jsboige commented Sep 13, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-dotnet — lane myia-po-2026:CoursIA — prev: LIGHT/tooling #15939

Tranche densite #13410 — Sudoku .NET (01 Backtracking / 03 Genetic / 09 GraphColoring)

Rotation R6 : apres ML (#16007), DecInfer .NET (#16012), SMT/Z3 (#16021) et Search/VRP (#16024), cette tranche couvre la famille Sudoku, jamais touchee aujourd'hui, en genre notebook-dotnet. Candidats choisis sur mesure LIVE (pedagogy_density.py sur origin/main f9bbefc7f) — le baseline #13410 est un snapshot Phase-1 fige, jamais retro-fit. Collision verifiee : le seul PR Sudoku ouvert (#15999) retire une dll et touche Sudoku-11-Choco uniquement.

Notebook Avant Apres Plancher
Sudoku-01-Backtracking-Csharp.ipynb 1172 1286 1200
Sudoku-03-Genetic-Csharp.ipynb 842 1327 1200
Sudoku-09-GraphColoring-Csharp.ipynb 862 1301 1200

19 cellules markdown d'interpretation placees APRES la cellule de code lue, chacune ancre sur sa sortie executee :

  • Sudoku-01 (1 cellule) : la meme classe BacktrackingDotNetSolver rend la combinatoire visible — 122 -> 490304 -> 12625368 appels de recherche pour 45/22/17 indices ( passer de 36 a 64 cases vides multiplie l'exploration par cent mille) ; lecture croisee avec le temps (0,9 ms / 285 ms / 8,7 s).
  • Sudoku-03 (9 cellules) : GeneticSharp par NuGet = framework evolutionnaire vs GA from-scratch du jumeau Python ; instance partagee par toute la serie (la grille facile est celle des notebooks 01 et 09) ; contrat du chromosome (TargetSudoku / GetSolution) ; fitness -erreurs = paysage sans gradient ; population dynamique + parallelisme TPL (fitness = fonction pure) ; representation 81 genes (generalite sans contrainte) ; le test a 0 erreur mais 12727 ms — la meme grille que le backtracking de Sudoku-01 resolvaient en 0,9 ms (facteur ~14000) ; representation 9 permutations (lignes valides par construction) : facteur 68 sur facile (186 ms) mais 6 erreurs restantes sur moyenne — colonnes et blocs sans encodage genetique.
  • Sudoku-09 (9 cellules) : reformulation coloration (cellule = sommet, exclusion = arete, chiffre = couleur) ; lecture des compteurs (49 noeuds / 12 backtracks / 2,01 ms) ; MRV (domaine minimal = decision gratuite maintenant) ; DSATUR (diversite de la saturation, pas seulement intensite) ; protocole benchmark ; facile = 4201 backtracks naifs contre 14 MRV ; difficile = 4356440 noeuds naifs contre 1202 DSATUR, facteur 209 (2650,67 ms -> 12,67 ms) ; integration SudokuHelper (0 erreur, deux chronometres au perimetre distinct) ; tranche QuikGraph reconciliee avec le jumeau Python (81 sommets / 810 aretes = nx.sudoku_graph(), degre 20 = 8 + 8 + 4, graphe connexe, 0 conflit / 810 aretes).

Validation

Gate Resultat
Round-trip byte-identity avant edition OK x3 (json.dumps ensure_ascii=False, indent=1, assert avant ecriture)
Cellules code byte-identiques a origin/main OK x3 (comparaison JSON post-edition, 8/13/15 cellules)
Diff insertions pures (+346, aucune suppression)
enrich_quality_ci.py --base --head rc=0 x3
detect_repeated_prose.py 01 : 2 findings pre-existants (indices decales) ; 03 : clean base et head ; 09 : 3 findings pre-existants (containment reduit) — aucun finding nouveau
pre-commit (H.3, markdown-rendering, cell-parses) Passed
pedagogy_density.py (LIVE, post-commit) 1286 / 1327 / 1301 — tous >= 1200

Notebooks deja executes (exec = code, 0 erreur) -> exception C.2 markdown-only, aucune re-execution requise.

Twin registry

Les trois notebooks sont les cotes C# de paires enregistrees dans scripts/notebook_tools/twin_pairs.d/ : Sudoku-01 Backtracking, Sudoku-03 Genetic, Sudoku-09 GraphColoring. Le markdown ajoute deplace les blob SHAs -> rebaseline --update --pair passe en derniere operation (commit a0e74ad12), SHAs verifies = git rev-parse HEAD:<path> pour les 6 cotes (Python inchanges, C# = nouveaux blobs). Check local : 157 paires | OK=154, les 3 DRIFT restants (Probas-16, SW-2, SW-7) sont pre-existants hors perimetre.

See #13410

🤖 Generated with Claude Code

jsboige and others added 2 commits September 13, 2026 22:19
…hColoring C# (densite 1172/842/862 -> 1286/1327/1301)

19 cellules markdown d'interpretation placees apres la cellule de code lue,
ancres sur les sorties executees reelles (exception C.2 markdown-only, exec
= code, 0 erreur) : decomposition de l'explosion combinatoire du backtracking
(122 -> 490304 -> 12625368 appels pour 45/22/17 indices) ; contrat
chromosome/fitness du GA et effet representation (81 genes : 0 erreur en
12727 ms ; 9 permutations : facteur 68 sur facile, 6 erreurs sur moyenne) ;
reformulation coloration de graphe, lecture des compteurs noeuds/backtracks,
benchmark difficile (4356440 noeuds naifs contre 1202 DSATUR, facteur 209) et
graphe QuikGraph (81 sommets / 810 aretes / degre 20 = 8+8+4).

Cellules code byte-identiques a origin/main ; enrich_quality_ci rc=0 x3 ;
detect_repeated_prose sans finding nouveau.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…netic, 09 GraphColoring)

Markdown ajoutee cote C# deplace les blob SHAs ; --update --pair passe en
derniere operation, SHAs verifies = git rev-parse HEAD:<path> pour les 6 cotes.
Check local : 157 paires, OK=154, les 3 DRIFT restants (Probas-16, SW-2, SW-7)
sont pre-existants hors perimetre.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 3
  • Code cells validated: 36
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 3.9s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.1s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 3.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 3.4s
Search-01-StateSpace.ipynb ✅ SUCCESS 2.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.2s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 15.7s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.7s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-13) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@myia-ai-01
myia-ai-01 merged commit d28e23e into main Sep 14, 2026
81 of 82 checks passed
myia-ai-01 pushed a commit that referenced this pull request Sep 14, 2026
…uctural fold (#16112)

The existing organ (#15901) measures source VOLUME. A cell whose source folds
entirely into a comment is invisible to it by construction: on the founding
case (PR #16097, Lean-18 cell 40cb37d5) the head GROWS 1132 -> 1728 chars
because the same write that stripped the newlines appended a 639-char recovery
note, so the magnitude gate stops before any floor. The BLOCKING
notebook-cell-source-parses guard is blind too -- a fully commented cell parses
clean -- which is why it stayed green on a cell whose code had disappeared.

Adds two structural signals to the SAME check-run, no new fast-lane wiring:

  * `emptied`       matched cell whose statement count went from > 0 to 0.
  * `orphan-output` non-empty outputs with 0 statements and no IPython magic
                    (base-free by construction -- the issue's 3rd criterion).

The existing exemptions speak about the base->head RELATION, so they arbitrate
the comparative signal only; `orphan-output` is intra-cell and stays true
whatever happens to the code elsewhere. Both exemption fractions measure 0.00
on the founding case, so nothing was suppressed.

`_scan_line` / `_strip_ipython_magics` / `_is_python_kernel` are imported from
check_cell_source_parses rather than reimplemented, so the organs cannot
disagree about the same cell.

Criterion 1 of the issue (unterminated-item count) is REFUTED by measurement,
not implemented: per-character serialization already exists on main
(GenAI/Texte/21_LoRA_FineTuning.ipynb cell 69b296cb -> 802 unterminated items,
10 statements, real output, healthy). Histogram over the 11970 code cells of
main's 953 Python notebooks: {0: 11970, 1: 1, 802: 1}. The signal is withdrawn
rather than shipped with a threshold; the folds it targeted are covered twice
without it (code-first fold -> the blocking syntax guard; comment-first fold ->
`emptied`).

Calibration: 0 structural findings on main's full Python corpus; 0 structural
findings on the 18 notebooks changed by 12 merged PRs (#16080, #16071, #16069,
#16067, #16041, #16039, #16027, #16024, #16021, #16020, #16013, #16012). A
first sweep without the no-magic guard flagged 6 cells, all `# comment` +
`!python`/`%pip` -- the magic IS the producer, so the guard is measured
necessity, not caution.

Evidence: 30 tests green in the file, 89 across the sibling organ files;
`--self-test` OK with BOTH founding-case replays firing (volume #15901 and
structure #16110); live end-to-end run at #16097's head reports the exact
measured finding with RC=1.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
jsboige pushed a commit that referenced this pull request Sep 25, 2026
…ent C#

Le redressement P16 retire 8 cellules de prose ajoutees par la campagne de
densite sur le cote C# des 4 paires Sudoku, sans toucher les jumeaux Python.
Les blob/content sha C# derivent donc, et `Twin parity audit (#8057)`
rougissait sur 4 paires qui etaient OK au base-ref origin/main.

Audit firsthand AVANT re-baseline (un --update aveugle consecrerait une
regression) : les 8 ids de cellule supprimes n'existent que dans des commits
de campagne, aucun n'est du contenu pre-campagne.
- 7 cellules (Sudoku-01 x1, Sudoku-03 x2, Sudoku-09 x4) ajoutees par
  d28e23e du 2026-09-14 (#16027, prose interpretative C#)
- 1 cellule (Sudoku-14 x1) ajoutee par 1f32e89 du 2026-09-03 (#14368)

Cote Python : recorded_python_sha == current_python_sha sur les 4 paires,
donc le jumeau Python n'a pas bouge. Le redressement annule exactement
l'enrichissement qui avait cause la derive.

Preuve : check_twin_parity.py --check rend [OK] sur les 4 paires apres update.
Le registre ne recoit que 4 enregistrements d'audit (SHA + date + auteur),
aucun notebook n'est modifie par ce commit.

Co-Authored-By: Claude Code <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Sep 25, 2026
… supprimees (#17051)

* fix(density,#17040): redressement paquet P16 — 8 cellules redondantes supprimees

Suppression de cellules markdown "lecture" ajoutees par la campagne #13410
qui doublonnaient une lecture pre-existante du meme output de cellule code.

Regle appliquee : (a) une sortie = AU PLUS UNE lecture, (c) SUPPRIMER les
doublons d'une lecture pre-existante. Cellules conservees intactes.

Notebooks modifies (5/12 du paquet) :
- MGS-30-ScatterSearch-Decomposition : 1 cellule (lecture du temoin)
- Sudoku-01-Backtracking-Csharp : 1 cellule (lecture 122->490304->12625368)
- Sudoku-03-Genetic-Csharp : 2 cellules (lectures MRV/GA intermediaires)
- Sudoku-09-GraphColoring-Csharp : 4 cellules (lectures SudokuGraph/MRV/DSATUR/QuikGraph)
- Sudoku-14-BDD-Csharp : 1 cellule (lecture integration BDD)

7 autres notebooks du paquet deja propres (MGS-17, MGS-20, Sudoku-06/07/11,
Argumentum I2, Lean-14b) : la campagne n'y a ajoute aucune cellule
redondante avec une lecture pre-existante.

Markdown-only : aucune re-execution requise (exception C.2). Cellules code,
outputs, execution_count et metadata intacts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(density,#17066): Sudoku-03 interpretations dupliquees retitrees — experiences distinctes (chromosome par cellules vs par permutations)

Regime #17066 : les deux occurrences d'« Interpretation des resultats » lisent
des sorties differentes (test SudokuCellsChromosome vs test
SudokuPermutationsChromosome) — retitrage distinctif, aucun texte modifie.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix(density,#17040): P16 — re-baseline parite jumelle apres redressement C#

Le redressement P16 retire 8 cellules de prose ajoutees par la campagne de
densite sur le cote C# des 4 paires Sudoku, sans toucher les jumeaux Python.
Les blob/content sha C# derivent donc, et `Twin parity audit (#8057)`
rougissait sur 4 paires qui etaient OK au base-ref origin/main.

Audit firsthand AVANT re-baseline (un --update aveugle consecrerait une
regression) : les 8 ids de cellule supprimes n'existent que dans des commits
de campagne, aucun n'est du contenu pre-campagne.
- 7 cellules (Sudoku-01 x1, Sudoku-03 x2, Sudoku-09 x4) ajoutees par
  d28e23e du 2026-09-14 (#16027, prose interpretative C#)
- 1 cellule (Sudoku-14 x1) ajoutee par 1f32e89 du 2026-09-03 (#14368)

Cote Python : recorded_python_sha == current_python_sha sur les 4 paires,
donc le jumeau Python n'a pas bouge. Le redressement annule exactement
l'enrichissement qui avait cause la derive.

Preuve : check_twin_parity.py --check rend [OK] sur les 4 paires apres update.
Le registre ne recoit que 4 enregistrements d'audit (SHA + date + auteur),
aucun notebook n'est modifie par ce commit.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: myia-po-2025 <po-2025@myia.local>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants